/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Nuevo_comprobante.java
 *
 * Created on 15/06/2009, 02:16:04 AM
 */

package Ventas;
import General.Detalle_producto;
import Control.Tiempo;
import Control.Conexion;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import java.awt.Color;

import Control.RenderTabla;
import Control.MiModeloVentaBoleta;
import Control.RenderEncabezado;
import java.awt.Component;
/**
 *
 * @author GAMA
 */
public class Nuevo_comprobanteV extends javax.swing.JPanel {
    Detalle_producto detalleProducto=new Detalle_producto(this);
    String [] fecha_sistema;
    //private DefaultTableModel model= new DefaultTableModel();
    private MiModeloVentaBoleta model;
    Comprobante_venta_productos frmMantenimientoVentas;
    int bandera;
    boolean bRUC=true;
    private int codigo;
    private String fecha;
    private String tipo_comprobante;
    private String cliente;
    private String nRUC;
    private float monto_IGV;

    //agregar
    private String dni;
    private String direccion;
    private String condicion_pago;

    public String getCondicion_pago() {
        return condicion_pago;
    }

    public void setCondicion_pago(String condicion_pago) {
        this.condicion_pago = condicion_pago;
        cmbFacturaCondicionesPago.setSelectedItem(condicion_pago);
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
        txtBoletaDNI.setText(dni);
    }

    public String getOrden_compra() {
        return orden_compra;
    }

    public void setOrden_compra(String orden_compra) {
        this.orden_compra = orden_compra;
        txtBoletaOrdenCompra.setText(orden_compra);
        txtFacturaOrdenCompra.setText(orden_compra);
    }

    public String getOrden_servicio() {
        return orden_servicio;
    }

    public void setOrden_servicio(String orden_servicio) {
        this.orden_servicio = orden_servicio;
        txtBoletaOrdenServicio.setText(orden_servicio);
        txtFacturaOrdenServicio.setText(orden_servicio);
    }
    private String orden_servicio;
    private String orden_compra;
    
    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
        txtBoletaDireccion.setText(direccion);
        txtFacturaDireccion.setText(direccion);
    }
    private float monto_total;
    private float subtotal;
    private Integer codigo_usuario_auditoria=0;
    /** Creates new form Nuevo_comprobante */
    public Nuevo_comprobanteV(Comprobante_venta_productos frmMantenimientoVentas,int bandera, Integer codigo_usuario_auditoria) {
        initComponents();
        this.codigo_usuario_auditoria=codigo_usuario_auditoria;
        this.frmMantenimientoVentas=frmMantenimientoVentas;
        this.bandera=bandera;
        model= new MiModeloVentaBoleta();
        model.addColumn("Guía");
        model.addColumn("Cantidad");
        model.addColumn("Descripción");
        model.addColumn("Precio Unitario");
        model.addColumn("Precio Total");
        cargar_codigo_comprobante();
        cargar_IGV();
        cargar_fecha_sistema();
        txtFacturaRUC.setBackground(Color.WHITE);

        tablafaccomv.setDefaultRenderer(Object.class, new RenderTabla(2));
        

        tablafaccomv.setModel(model);
        cambiar_color_encabezado_tabla();
       
       modificarPresentacionComprobanteVenta();
          
    }

     public void cargar_IGV() {
        Conexion c = new Conexion();
        Vector<String> vIGV = c.cargar_IGV();
        this.cmbIGV.removeAllItems();
        for (int i = 0; i < vIGV.size(); i++) {
            this.cmbIGV.addItem(vIGV.get(i));
        }

        this.cmbIGV.addItem("--Seleccionar--");
    }

    public void cambiar_color_encabezado_tabla(){
        tablafaccomv.setGridColor(new Color(14,14,162));//colores de celdas
        tablafaccomv.getColumnModel().getColumn(0).setHeaderRenderer(new RenderEncabezado(new Color(210,222,233),new Color(14,14,162)));
        tablafaccomv.getColumnModel().getColumn(1).setHeaderRenderer(new RenderEncabezado(new Color(210,222,233),new Color(14,14,162)));
        tablafaccomv.getColumnModel().getColumn(2).setHeaderRenderer(new RenderEncabezado(new Color(210,222,233),new Color(14,14,162)));
        tablafaccomv.getColumnModel().getColumn(3).setHeaderRenderer(new RenderEncabezado(new Color(210,222,233),new Color(14,14,162)));
        tablafaccomv.getColumnModel().getColumn(4).setHeaderRenderer(new RenderEncabezado(new Color(210,222,233),new Color(14,14,162)));
    }
    public void cargar_codigo_comprobante(){
        Conexion c=new Conexion();
        numero.setText(""+c.retornar_siguiente_comprobante_venta());
    }
    public void cargar_fecha_sistema(){
        Tiempo t=new Tiempo();
        fecha_sistema=t.obtener_fecha_sistema();
        txtFacturafecha.setText(fecha_sistema[0]+"/"+fecha_sistema[1]+"/"+fecha_sistema[2]);
        txtBoletafecha.setText(txtFacturafecha.getText());
    }
    public DefaultTableModel retornarModeloTabla(){
        return this.getModel();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jpnlBoleta = new javax.swing.JPanel();
        txtBoletaOrdenCompra = new javax.swing.JTextField();
        lblFacturaRUC8 = new javax.swing.JLabel();
        lblFacturaRUC9 = new javax.swing.JLabel();
        txtBoletaOrdenServicio = new javax.swing.JTextField();
        cmbBoletaCondicionesPago = new javax.swing.JComboBox();
        txtBoletafecha = new javax.swing.JTextField();
        lblFacturaRUC10 = new javax.swing.JLabel();
        lblFacturaRUC11 = new javax.swing.JLabel();
        txtBoletaCliente = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        lblFacturaRUC12 = new javax.swing.JLabel();
        txtBoletaDNI = new javax.swing.JTextField();
        lblFacturaRUC13 = new javax.swing.JLabel();
        txtBoletaDireccion = new javax.swing.JTextField();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        pnlCV = new javax.swing.JPanel();
        jpnlVentaDatosEspecificos = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablafaccomv = new javax.swing.JTable();
        lblFacturasubtotal = new javax.swing.JLabel();
        lblcFacturasubtotal = new javax.swing.JLabel();
        lblTotal = new javax.swing.JLabel();
        lblcTotal = new javax.swing.JLabel();
        lblcFacturaIGV = new javax.swing.JLabel();
        btnAgregar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        jLabel16 = new javax.swing.JLabel();
        cmbIGV = new javax.swing.JComboBox();
        jLabel15 = new javax.swing.JLabel();
        jpnlFactura = new javax.swing.JPanel();
        txtFacturafecha = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        txtFacturaCliente = new javax.swing.JTextField();
        lblFacturaRUC = new javax.swing.JLabel();
        txtFacturaRUC = new javax.swing.JTextField();
        txtFacturaDireccion = new javax.swing.JTextField();
        txtFacturaOrdenCompra = new javax.swing.JTextField();
        lblFacturaRUC3 = new javax.swing.JLabel();
        cmbFacturaCondicionesPago = new javax.swing.JComboBox();
        lblFacturaRUC4 = new javax.swing.JLabel();
        lblFacturaRUC5 = new javax.swing.JLabel();
        txtFacturaOrdenServicio = new javax.swing.JTextField();
        lblFacturaRUC6 = new javax.swing.JLabel();
        lblFacturaRUC7 = new javax.swing.JLabel();
        btnguardar = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        cmbcomprobante = new javax.swing.JComboBox();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        lblTipoComprobante = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        numero = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        lblFacturaRUC1 = new javax.swing.JLabel();

        jpnlBoleta.setMinimumSize(new java.awt.Dimension(670, 110));
        jpnlBoleta.setPreferredSize(new java.awt.Dimension(670, 110));
        jpnlBoleta.setLayout(null);

        txtBoletaOrdenCompra.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletaOrdenCompra.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlBoleta.add(txtBoletaOrdenCompra);
        txtBoletaOrdenCompra.setBounds(470, 60, 170, 20);

        lblFacturaRUC8.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC8.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC8.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC8.setText("Orden de compra");
        lblFacturaRUC8.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC8.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC8);
        lblFacturaRUC8.setBounds(470, 40, 170, 20);

        lblFacturaRUC9.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC9.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC9.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC9.setText("Orden de servicio");
        lblFacturaRUC9.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC9.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC9);
        lblFacturaRUC9.setBounds(300, 40, 170, 20);

        txtBoletaOrdenServicio.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletaOrdenServicio.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlBoleta.add(txtBoletaOrdenServicio);
        txtBoletaOrdenServicio.setBounds(300, 60, 170, 20);

        cmbBoletaCondicionesPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Contado", "Crédito" }));
        cmbBoletaCondicionesPago.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlBoleta.add(cmbBoletaCondicionesPago);
        cmbBoletaCondicionesPago.setBounds(110, 60, 190, 20);

        txtBoletafecha.setEditable(false);
        txtBoletafecha.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletafecha.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlBoleta.add(txtBoletafecha);
        txtBoletafecha.setBounds(0, 60, 110, 20);

        lblFacturaRUC10.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC10.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC10.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC10.setText("Fecha");
        lblFacturaRUC10.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC10.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC10);
        lblFacturaRUC10.setBounds(0, 40, 110, 20);

        lblFacturaRUC11.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC11.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC11.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC11.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC11.setText("Condiciones de pago");
        lblFacturaRUC11.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC11.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC11);
        lblFacturaRUC11.setBounds(110, 40, 190, 20);

        txtBoletaCliente.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletaCliente.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        txtBoletaCliente.addCaretListener(new javax.swing.event.CaretListener() {
            public void caretUpdate(javax.swing.event.CaretEvent evt) {
                txtBoletaClienteCaretUpdate(evt);
            }
        });
        jpnlBoleta.add(txtBoletaCliente);
        txtBoletaCliente.setBounds(0, 20, 270, 20);

        jLabel4.setBackground(new java.awt.Color(210, 222, 233));
        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel4.setForeground(new java.awt.Color(14, 14, 162));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("Nombre y Apellido");
        jLabel4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jLabel4.setOpaque(true);
        jpnlBoleta.add(jLabel4);
        jLabel4.setBounds(0, 0, 270, 20);

        lblFacturaRUC12.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC12.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC12.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC12.setText("D.N.I.");
        lblFacturaRUC12.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC12.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC12);
        lblFacturaRUC12.setBounds(270, 0, 100, 20);

        txtBoletaDNI.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletaDNI.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        txtBoletaDNI.addCaretListener(new javax.swing.event.CaretListener() {
            public void caretUpdate(javax.swing.event.CaretEvent evt) {
                txtBoletaDNICaretUpdate(evt);
            }
        });
        jpnlBoleta.add(txtBoletaDNI);
        txtBoletaDNI.setBounds(270, 20, 100, 20);

        lblFacturaRUC13.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC13.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC13.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC13.setText("Dirección");
        lblFacturaRUC13.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC13.setOpaque(true);
        jpnlBoleta.add(lblFacturaRUC13);
        lblFacturaRUC13.setBounds(370, 0, 270, 20);

        txtBoletaDireccion.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtBoletaDireccion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlBoleta.add(txtBoletaDireccion);
        txtBoletaDireccion.setBounds(370, 20, 270, 20);

        pnlCV.setBackground(new java.awt.Color(255, 255, 255));
        pnlCV.setLayout(null);

        jpnlVentaDatosEspecificos.setBackground(new java.awt.Color(255, 255, 255));
        jpnlVentaDatosEspecificos.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(210, 222, 233)), "Detalle Comprobante", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11), new java.awt.Color(14, 14, 162))); // NOI18N
        jpnlVentaDatosEspecificos.setLayout(null);

        jScrollPane1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jScrollPane1MousePressed(evt);
            }
        });
        jScrollPane1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jScrollPane1KeyPressed(evt);
            }
        });

        tablafaccomv.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "GUIA", "CANTIDAD", "DESCRIPCION", "PRECIO UNITARIO", "PRECIO TOTAL"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Object.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        tablafaccomv.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                tablafaccomvFocusGained(evt);
            }
        });
        jScrollPane1.setViewportView(tablafaccomv);

        jpnlVentaDatosEspecificos.add(jScrollPane1);
        jScrollPane1.setBounds(20, 50, 620, 100);

        lblFacturasubtotal.setFont(new java.awt.Font("Tahoma", 1, 12));
        lblFacturasubtotal.setText("SUB-TOTAL S/.");
        jpnlVentaDatosEspecificos.add(lblFacturasubtotal);
        lblFacturasubtotal.setBounds(410, 160, 120, 18);

        lblcFacturasubtotal.setFont(new java.awt.Font("Tahoma", 0, 12));
        lblcFacturasubtotal.setText("0.0");
        lblcFacturasubtotal.setAlignmentX(0.5F);
        lblcFacturasubtotal.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        lblcFacturasubtotal.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jpnlVentaDatosEspecificos.add(lblcFacturasubtotal);
        lblcFacturasubtotal.setBounds(560, 160, 80, 18);

        lblTotal.setFont(new java.awt.Font("Tahoma", 1, 12));
        lblTotal.setText("TOTAL S/.");
        jpnlVentaDatosEspecificos.add(lblTotal);
        lblTotal.setBounds(440, 200, 80, 18);

        lblcTotal.setFont(new java.awt.Font("Tahoma", 0, 12));
        lblcTotal.setText("0.00");
        lblcTotal.setAlignmentX(0.2F);
        lblcTotal.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        jpnlVentaDatosEspecificos.add(lblcTotal);
        lblcTotal.setBounds(560, 200, 80, 18);

        lblcFacturaIGV.setFont(new java.awt.Font("Tahoma", 0, 12));
        lblcFacturaIGV.setText("0.00");
        lblcFacturaIGV.setAlignmentX(0.2F);
        lblcFacturaIGV.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        lblcFacturaIGV.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jpnlVentaDatosEspecificos.add(lblcFacturaIGV);
        lblcFacturaIGV.setBounds(560, 180, 80, 18);

        btnAgregar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/Agregar1.gif"))); // NOI18N
        btnAgregar.setMnemonic('r');
        btnAgregar.setText("Agregar");
        btnAgregar.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        btnAgregar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });
        jpnlVentaDatosEspecificos.add(btnAgregar);
        btnAgregar.setBounds(20, 20, 100, 25);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/Quitar1.gif"))); // NOI18N
        btnEliminar.setMnemonic('i');
        btnEliminar.setText("Quitar");
        btnEliminar.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        jpnlVentaDatosEspecificos.add(btnEliminar);
        btnEliminar.setBounds(140, 20, 90, 25);

        jLabel16.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel16.setText("I.G.V.(");
        jpnlVentaDatosEspecificos.add(jLabel16);
        jLabel16.setBounds(380, 180, 40, 20);

        cmbIGV.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbIGV.setName("cmbIGV"); // NOI18N
        cmbIGV.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbIGVItemStateChanged(evt);
            }
        });
        jpnlVentaDatosEspecificos.add(cmbIGV);
        cmbIGV.setBounds(420, 180, 56, 20);

        jLabel15.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel15.setText(") S/.");
        jpnlVentaDatosEspecificos.add(jLabel15);
        jLabel15.setBounds(480, 180, 50, 20);

        pnlCV.add(jpnlVentaDatosEspecificos);
        jpnlVentaDatosEspecificos.setBounds(20, 200, 670, 220);

        jpnlFactura.setBackground(new java.awt.Color(255, 255, 255));
        jpnlFactura.setMinimumSize(new java.awt.Dimension(670, 110));
        jpnlFactura.setPreferredSize(new java.awt.Dimension(670, 110));
        jpnlFactura.setLayout(null);

        txtFacturafecha.setEditable(false);
        txtFacturafecha.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturafecha.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlFactura.add(txtFacturafecha);
        txtFacturafecha.setBounds(0, 60, 110, 20);

        jLabel3.setBackground(new java.awt.Color(210, 222, 233));
        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel3.setForeground(new java.awt.Color(14, 14, 162));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Nombre y Apellido o Razón Social");
        jLabel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jLabel3.setOpaque(true);
        jpnlFactura.add(jLabel3);
        jLabel3.setBounds(0, 0, 270, 20);

        txtFacturaCliente.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturaCliente.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        txtFacturaCliente.addCaretListener(new javax.swing.event.CaretListener() {
            public void caretUpdate(javax.swing.event.CaretEvent evt) {
                txtFacturaClienteCaretUpdate(evt);
            }
        });
        jpnlFactura.add(txtFacturaCliente);
        txtFacturaCliente.setBounds(0, 20, 270, 20);

        lblFacturaRUC.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC.setText("Orden de compra");
        lblFacturaRUC.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC);
        lblFacturaRUC.setBounds(470, 40, 170, 20);

        txtFacturaRUC.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturaRUC.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        txtFacturaRUC.addCaretListener(new javax.swing.event.CaretListener() {
            public void caretUpdate(javax.swing.event.CaretEvent evt) {
                txtFacturaRUCCaretUpdate(evt);
            }
        });
        jpnlFactura.add(txtFacturaRUC);
        txtFacturaRUC.setBounds(270, 20, 100, 20);

        txtFacturaDireccion.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturaDireccion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlFactura.add(txtFacturaDireccion);
        txtFacturaDireccion.setBounds(370, 20, 270, 20);

        txtFacturaOrdenCompra.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturaOrdenCompra.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlFactura.add(txtFacturaOrdenCompra);
        txtFacturaOrdenCompra.setBounds(470, 60, 170, 20);

        lblFacturaRUC3.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC3.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC3.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC3.setText("Fecha");
        lblFacturaRUC3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC3.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC3);
        lblFacturaRUC3.setBounds(0, 40, 110, 20);

        cmbFacturaCondicionesPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Contado", "Crédito" }));
        cmbFacturaCondicionesPago.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlFactura.add(cmbFacturaCondicionesPago);
        cmbFacturaCondicionesPago.setBounds(110, 60, 190, 20);

        lblFacturaRUC4.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC4.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC4.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC4.setText("Condiciones de pago");
        lblFacturaRUC4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC4.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC4);
        lblFacturaRUC4.setBounds(110, 40, 190, 20);

        lblFacturaRUC5.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC5.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC5.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC5.setText("Orden de servicio");
        lblFacturaRUC5.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC5.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC5);
        lblFacturaRUC5.setBounds(300, 40, 170, 20);

        txtFacturaOrdenServicio.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtFacturaOrdenServicio.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        jpnlFactura.add(txtFacturaOrdenServicio);
        txtFacturaOrdenServicio.setBounds(300, 60, 170, 20);

        lblFacturaRUC6.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC6.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC6.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC6.setText("Dirección");
        lblFacturaRUC6.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC6.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC6);
        lblFacturaRUC6.setBounds(370, 0, 270, 20);

        lblFacturaRUC7.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC7.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC7.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC7.setText("R.U.C.");
        lblFacturaRUC7.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC7.setOpaque(true);
        jpnlFactura.add(lblFacturaRUC7);
        lblFacturaRUC7.setBounds(270, 0, 100, 20);

        pnlCV.add(jpnlFactura);
        jpnlFactura.setBounds(30, 110, 640, 80);

        btnguardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/Guardar16.gif"))); // NOI18N
        btnguardar.setMnemonic('g');
        btnguardar.setText("Guardar");
        btnguardar.setEnabled(false);
        btnguardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnguardarActionPerformed(evt);
            }
        });
        pnlCV.add(btnguardar);
        btnguardar.setBounds(230, 430, 91, 25);

        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/Cancelar16.gif"))); // NOI18N
        jButton4.setMnemonic('c');
        jButton4.setText("Cancelar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        pnlCV.add(jButton4);
        jButton4.setBounds(360, 430, 95, 25);

        cmbcomprobante.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Factura", "Boleta" }));
        cmbcomprobante.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        cmbcomprobante.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbcomprobanteItemStateChanged(evt);
            }
        });
        cmbcomprobante.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbcomprobanteActionPerformed(evt);
            }
        });
        pnlCV.add(cmbcomprobante);
        cmbcomprobante.setBounds(30, 60, 160, 20);

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(14, 14, 162), 2, true));
        jPanel1.setLayout(null);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel1.setForeground(new java.awt.Color(14, 14, 162));
        jLabel1.setText("R.U.C. 20100074568");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(30, 10, 130, 20);

        lblTipoComprobante.setBackground(new java.awt.Color(210, 222, 233));
        lblTipoComprobante.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblTipoComprobante.setForeground(new java.awt.Color(14, 14, 162));
        lblTipoComprobante.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblTipoComprobante.setText("FACTURA");
        lblTipoComprobante.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblTipoComprobante.setOpaque(true);
        jPanel1.add(lblTipoComprobante);
        lblTipoComprobante.setBounds(0, 30, 180, 20);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12));
        jLabel2.setText("001-");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(32, 60, 40, 15);

        numero.setFont(new java.awt.Font("Tahoma", 1, 11));
        numero.setForeground(new java.awt.Color(204, 0, 0));
        numero.setEnabled(false);
        numero.addCaretListener(new javax.swing.event.CaretListener() {
            public void caretUpdate(javax.swing.event.CaretEvent evt) {
                numeroCaretUpdate(evt);
            }
        });
        jPanel1.add(numero);
        numero.setBounds(90, 58, 70, 20);

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel5.setForeground(new java.awt.Color(204, 0, 0));
        jLabel5.setText("Nº");
        jPanel1.add(jLabel5);
        jLabel5.setBounds(70, 60, 20, 14);

        pnlCV.add(jPanel1);
        jPanel1.setBounds(490, 10, 180, 90);

        lblFacturaRUC1.setBackground(new java.awt.Color(210, 222, 233));
        lblFacturaRUC1.setFont(new java.awt.Font("Tahoma", 1, 11));
        lblFacturaRUC1.setForeground(new java.awt.Color(14, 14, 162));
        lblFacturaRUC1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblFacturaRUC1.setText("Tipo de Comprobante");
        lblFacturaRUC1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(14, 14, 162)));
        lblFacturaRUC1.setOpaque(true);
        pnlCV.add(lblFacturaRUC1);
        lblFacturaRUC1.setBounds(30, 40, 160, 20);

        jTabbedPane1.addTab("Nuevo comprobante venta", pnlCV);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 714, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(23, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 491, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void jScrollPane1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jScrollPane1MousePressed
        // TODO add your handling code here:
}//GEN-LAST:event_jScrollPane1MousePressed

    private void jScrollPane1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jScrollPane1KeyPressed
        // TODO add your handling code here:
}//GEN-LAST:event_jScrollPane1KeyPressed
     public Double redondear( float numero, int decimales ) {
    return Math.round(numero*Math.pow(10,decimales))/Math.pow(10,decimales);
  }
    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
           if(tablafaccomv.getSelectedRow()!=-1){
            int fila =tablafaccomv.getSelectedRow();
            detalleProducto.eliminar_venta_elemento_en_anterior(fila);
            getModel().removeRow(fila);
            float subtotal=0;
            for(int i=0;i<getModel().getRowCount();i++){
                int cantidad_model=Integer.parseInt(getModel().getValueAt(i, 0).toString());
                String vvv=getModel().getValueAt(i, 2).toString();
                float valor_fila=cantidad_model*Float.parseFloat(vvv);
                subtotal=valor_fila+subtotal;
            }
            lblcFacturasubtotal.setText(""+redondear(subtotal,2));
            float total=0;
            if(this.cmbcomprobante.getSelectedItem().equals("Factura")){
                float igv=Float.parseFloat(String.valueOf(subtotal*(Float.parseFloat(this.cmbIGV.getSelectedItem().toString())/100)));
                total=igv+subtotal;
                igv=Float.parseFloat(""+redondear(igv,2));
                lblcFacturaIGV.setText(""+igv);

            }else{
                total=subtotal;
            }
            total=Float.parseFloat(""+redondear(total,2));
            lblcTotal.setText(""+total);
           
            if(getModel().getRowCount()==0){
               this.habilitarBoton(false);

            }
            this.tablafaccomv.setModel(getModel());
            cambiar_color_encabezado_tabla();
        }else{
             if(tablafaccomv.getRowCount()==0){
              JOptionPane.showMessageDialog(this,"No existen elementos en la tabla","Información",JOptionPane.WARNING_MESSAGE);
             }else{
             JOptionPane.showMessageDialog(this,"Debe seleccionar una fila","Información",JOptionPane.WARNING_MESSAGE);
             }
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        // TODO add your handling code here:
         if(this.escrito_campo_numero_comprobante()){         
          detalleProducto.setVisible(true);
        detalleProducto.visibleInicial(true);
         }
        //else{
          //  JOptionPane.showMessageDialog(this,"Ingrese los campos solicitados","Información",JOptionPane.WARNING_MESSAGE);
        //}
     

    }//GEN-LAST:event_btnAgregarActionPerformed
 public boolean escrito_campo_numero_comprobante(){
          boolean escrito=false;
         /* if(cmbcomprobante.getSelectedItem().toString().equals("Factura")){
              if(!txtFacturaRUC.getText().equals("") && !txtFacturaCliente.getText().equals("")){
                  escrito=true;
              }
          }else{//boleta
               if(!txtBoletaCliente.getText().equals("")){
                  escrito=true;
              }
          }
*/          String mensaje="No se puede agregar artículo";
          if(cmbcomprobante.getSelectedItem().toString().equals("Factura")){
              if(validacion_txtFacturaCliente(mensaje) && validacion_txtFacturaRUC(mensaje)){
                    escrito=true;
              }else
              {
                  escrito=false;
              }
          }else{
              if(validacion_txtBoletaCliente(mensaje)){
                  escrito=true;
              }else{
                  escrito=false;
              }
          }

          return escrito;
      }

    private void cmbcomprobanteItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbcomprobanteItemStateChanged
        // TODO add your handling code here:
       if(evt.getStateChange()==1){//boleta
            modificarPresentacionComprobanteVenta();
       }
    
    modificar_total_igv();

}//GEN-LAST:event_cmbcomprobanteItemStateChanged

    public void modificarPresentacionComprobanteVenta(){
        if(this.cmbcomprobante.getSelectedItem().toString().equals("Boleta")){
            lblTipoComprobante.setText("BOLETA");
            jpnlFactura.setVisible(false);
            jpnlBoleta.setBounds(jpnlFactura.getBounds());
            pnlCV.add(jpnlBoleta);
            jpnlBoleta.setVisible(true);

            this.cmbIGV.setVisible(false);
            this.jLabel16.setVisible(false);
            this.jLabel15.setVisible(false);


            //limpiar campos boleta diferentes
            txtBoletaCliente.setText("");
            txtBoletaDNI.setText("");
            
            lblcFacturaIGV.setVisible(false);
            //lblFacturaIGV.setVisible(false);
            lblFacturasubtotal.setVisible(false);
            lblcFacturasubtotal.setVisible(false);
            bRUC=false;
            lblTotal.setBounds(lblFacturasubtotal.getBounds());
            lblcTotal.setBounds(lblcFacturasubtotal.getBounds());
            }
            else{ //Factura
            lblTipoComprobante.setText("FACTURA");
            jpnlFactura.setVisible(true);
            lblFacturaRUC.setVisible(true);
            txtFacturaRUC.setVisible(true);
            lblcFacturaIGV.setVisible(true);
            //lblFacturaIGV.setVisible(true);
            //limpiar campos factura diferentes
            txtFacturaCliente.setText("");
            txtFacturaRUC.setText("");
            
            lblTotal.setBounds(440, 200, 80, 18);
            lblcTotal.setBounds(560, 200, 80, 18);
            lblFacturasubtotal.setVisible(true);
            lblcFacturasubtotal.setVisible(true);
            bRUC=true;


            }
    }
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        // TODO add your handling code here:
        this.frmMantenimientoVentas.getPanelContenedorVendedor().removeAll();
        this.frmMantenimientoVentas.getPanelContenedorVendedor().add(this.frmMantenimientoVentas.getPanelComprobantes());
        frmMantenimientoVentas.getPanelComprobantes().setSize(761,510);
        frmMantenimientoVentas.setVisible(false);
        frmMantenimientoVentas.setVisible(true);

    }//GEN-LAST:event_jButton4ActionPerformed

    private void btnguardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnguardarActionPerformed
        // TODO add your handling code here:

         String RUC="",condicion_pago="",direccion="",orden_servicio="",orden_compra="",dni="";
         boolean prohibido=false;
        
        String mensaje="No se puede guardar";
         if(bRUC){
             if(!validacion_txtFacturaCliente(mensaje))   prohibido=true;
            if(!validacion_txtFacturaRUC(mensaje)) {
                prohibido=true;
            }
            else {
                RUC=txtFacturaRUC.getText();
            }
             condicion_pago=cmbFacturaCondicionesPago.getSelectedItem().toString();
             direccion=txtFacturaDireccion.getText();
             orden_servicio=txtFacturaOrdenServicio.getText();
             orden_compra=txtFacturaOrdenCompra.getText();
         }else{
            if(!validacion_txtBoletaCliente(mensaje))   prohibido=true;

            condicion_pago=cmbBoletaCondicionesPago.getSelectedItem().toString();
             direccion=txtBoletaDireccion.getText();
             orden_servicio=txtBoletaOrdenServicio.getText();
             orden_compra=txtBoletaOrdenCompra.getText();
             dni=txtBoletaDNI.getText();
         }
        if(!prohibido){
         int codigo =Integer.parseInt(numero.getText());
         String vfecha =fecha_sistema[2]+"-"+fecha_sistema[1]+"-"+fecha_sistema[0];
         //consulta sql del  codigo de proveedor
         String  tipo_comprobante=cmbcomprobante.getSelectedItem().toString();
       String cliente="";
         if(tipo_comprobante.equals("Boleta")){
         cliente=txtBoletaCliente.getText();//?????????????????
        }else{
           cliente=txtFacturaCliente.getText();//?????????????????
        }

         float igv= Float.parseFloat(lblcFacturaIGV.getText());
         float total=Float.parseFloat(lblcTotal.getText());

         int vIGV=(this.cmbcomprobante.getSelectedItem().toString().equals("Factura"))?Integer.parseInt(this.cmbIGV.getSelectedItem().toString()):0;

         if(bandera==1 ){
         this.registrar_comprobante_venta(condicion_pago,codigo, vfecha, igv, total, tipo_comprobante, cliente, RUC,direccion,orden_servicio,orden_compra,dni,vIGV);
         }else{
             if(bandera==2){
                this.modificar_comprobante_venta(condicion_pago,codigo, vfecha, igv, total, tipo_comprobante, cliente, RUC, direccion, orden_servicio,orden_compra,dni);
             }
         }

        }

    }//GEN-LAST:event_btnguardarActionPerformed

    private void tablafaccomvFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tablafaccomvFocusGained
        // TODO add your handling code here:
        modificar_total_igv();
        System.out.println("Aqui es");
    }//GEN-LAST:event_tablafaccomvFocusGained

    private void numeroCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_numeroCaretUpdate
        // TODO add your handling code here:
          String texto=numero.getText();
          char [] elemento=texto.toCharArray();
          boolean valido=true;
          for(int i=0;i<elemento.length;i++){
              if(!Character.isDigit(elemento[i])){
                  valido=false;
              }
          }
          if(!valido){
              numero.setForeground(Color.RED);
          }else{
              numero.setForeground(Color.BLACK);
          }
          
        if(!txtFacturaCliente.getText().equals("") && !txtFacturaRUC.getText().equals("") && tablafaccomv.getRowCount()!=0 && !numero.getText().equals("")){
            btnguardar.setEnabled(true);
        }else{
            btnguardar.setEnabled(false);
        }
    }//GEN-LAST:event_numeroCaretUpdate

    private void txtFacturaRUCCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtFacturaRUCCaretUpdate
        // TODO add your handling code here:
        String texto=txtFacturaRUC.getText();
        char [] elemento=texto.toCharArray();
        boolean valido=true;
        for(int i=0;i<elemento.length;i++){
            if(!Character.isDigit(elemento[i])){
                valido=false;
            }
        }
        if(valido){
            if(texto.length()<11){
                txtFacturaRUC.setForeground(Color.lightGray);
            }else{
                if(texto.length()>11){
                    txtFacturaRUC.setForeground(Color.lightGray);
                }else{
                    txtFacturaRUC.setForeground(Color.BLACK);
                }
            }
        }else{
            txtFacturaRUC.setForeground(Color.RED);
        }
        if(!txtFacturaCliente.getText().equals("") && !txtFacturaRUC.getText().equals("") && tablafaccomv.getRowCount()!=0 && !numero.getText().equals("")){
            btnguardar.setEnabled(true);
        }else{
            btnguardar.setEnabled(false);
        }
}//GEN-LAST:event_txtFacturaRUCCaretUpdate

    private void txtFacturaClienteCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtFacturaClienteCaretUpdate
        // TODO add your handling code here:
        String texto=txtFacturaCliente.getText();
        char [] elemento=texto.toCharArray();
        boolean valido=true;
        for(int i=0;i<elemento.length;i++){
            if(!Character.isLetter(elemento[i]) && elemento[i]!=' ' && elemento[i]!='.'){
                valido=false;
            }
        }
        if(!valido){
            txtFacturaCliente.setForeground(Color.RED);
        }else{
            txtFacturaCliente.setForeground(Color.BLACK);
        }
    
        if(cmbcomprobante.getSelectedItem().toString().equals("Factura")){
            if(!txtFacturaCliente.getText().equals("") && !txtFacturaRUC.getText().equals("") && tablafaccomv.getRowCount()!=0 && !numero.getText().equals("")){
                btnguardar.setEnabled(true);
            }else{
                btnguardar.setEnabled(false);
            }
        }else{
            if(!txtFacturaCliente.getText().equals("") && tablafaccomv.getRowCount()!=0){
                btnguardar.setEnabled(true);
            }else{
                btnguardar.setEnabled(false);
            }
        }
    
}//GEN-LAST:event_txtFacturaClienteCaretUpdate

    public boolean validacion_txtFacturaCliente(String mensaje){
        boolean valido=true;
        if(txtFacturaCliente.getText().equals("")){
          JOptionPane.showMessageDialog(this,"Ingrese el Nombre y Apellido o Razón Social del cliente",mensaje,JOptionPane.ERROR_MESSAGE);
          txtFacturaCliente.setBackground(new Color(249,232,232));
          valido=false;
          return valido;
        }else{
              if(txtFacturaCliente.getForeground()==Color.RED){
                JOptionPane.showMessageDialog(this,"Ingrese sólo letras",mensaje,JOptionPane.ERROR_MESSAGE);
                valido=false;
                txtFacturaCliente.setText("");
                txtFacturaCliente.setBackground(new Color(249,232,232));
                 return valido;
            }else{
                txtFacturaCliente.setBackground(Color.WHITE);
            }
            
            
        }
       
        return valido;
    }
    public boolean validacion_txtBoletaCliente(String mensaje){
        boolean valido=true;
        if(txtBoletaCliente.getText().equals("")){
          JOptionPane.showMessageDialog(this,"Ingrese el Nombre y Apellido del cliente",mensaje,JOptionPane.ERROR_MESSAGE);
          txtBoletaCliente.setBackground(new Color(249,232,232));
          valido=false;
          return valido;
        }else{

              if(txtBoletaCliente.getForeground()==Color.RED){
                JOptionPane.showMessageDialog(this,"Ingrese sólo letras",mensaje,JOptionPane.ERROR_MESSAGE);
                valido=false;
                txtBoletaCliente.setText("");
                txtBoletaCliente.setBackground(new Color(249,232,232));
                 return valido;
            }else{
                txtBoletaCliente.setBackground(Color.WHITE);
            }


        }

        return valido;
    }
      public boolean validacion_txtFacturaRUC(String mensaje){
        boolean valido=true;
        if(txtFacturaRUC.getText().equals("")){
          JOptionPane.showMessageDialog(this,"Ingrese el número de R.U.C. del cliente",mensaje,JOptionPane.ERROR_MESSAGE);
          txtFacturaRUC.setBackground(new Color(249,232,232));
          valido=false;
          return valido;
        }else{
          if(txtFacturaRUC.getForeground()==Color.lightGray){
                 valido=false;
                 //txtRUC.setBackground(Color.PINK);
                 JOptionPane.showMessageDialog(this,"RUC: Debe ingresar 11 dígitos",mensaje,JOptionPane.ERROR_MESSAGE);
             }else{
                 if(txtFacturaRUC.getForeground()==Color.RED){
                     valido=false;
                     //txtRUC.setBackground(Color.PINK);
                     JOptionPane.showMessageDialog(this,"RUC: Formato de datos no permitido. \nIngrese sólo números.",mensaje,JOptionPane.ERROR_MESSAGE);
                 }else{
                     txtFacturaRUC.setBackground(new Color(255,255,255));
                 }
             }
        }

        return valido;
    }
    private void txtBoletaClienteCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtBoletaClienteCaretUpdate
        // TODO add your handling code here:
    }//GEN-LAST:event_txtBoletaClienteCaretUpdate

    private void txtBoletaDNICaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_txtBoletaDNICaretUpdate
        // TODO add your handling code here:
             String texto=txtBoletaDNI.getText();
        char [] elemento=texto.toCharArray();
        boolean valido=true;
        for(int i=0;i<elemento.length;i++){
            if(!Character.isDigit(elemento[i])){
                valido=false;
            }
        }

        if(valido){
            if(texto.length()<8){
                txtBoletaDNI.setForeground(Color.lightGray);
                valido=false;
            }else{
                if(texto.length()>8){
                    txtBoletaDNI.setForeground(Color.lightGray);
                    valido=false;
                }else{
                    txtBoletaDNI.setForeground(Color.BLACK);
                }
            }
        }else{
            txtBoletaDNI.setForeground(Color.RED);
        }
        if((valido ==true || txtBoletaDNI.getText().equals("") ) &&tablafaccomv.getRowCount()!=0 && !numero.getText().equals("")){
            btnguardar.setEnabled(true);
        }else{
            btnguardar.setEnabled(false);
        }
    }//GEN-LAST:event_txtBoletaDNICaretUpdate

    private void cmbcomprobanteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbcomprobanteActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_cmbcomprobanteActionPerformed

    private void cmbIGVItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbIGVItemStateChanged
        // TODO add your handling code here:

        if(cmbIGV.getItemCount()>0)
            modificar_total_igv();

    }//GEN-LAST:event_cmbIGVItemStateChanged
    public void modificar_total_igv(){
        float subtotal=0;
        boolean invalido=false;
            for(int i=0;i<getModel().getRowCount();i++){
                int cantidad_model=0;
                float valor_fila=0, vvv=0;
                Conexion c=new Conexion();
                String descripcion_producto=getModel().getValueAt(i, 2).toString();
                if(c.retornar_tipo_venta_detalle_comprobante_venta(descripcion_producto)==0){
                try{
                cantidad_model=Integer.parseInt(getModel().getValueAt(i, 1).toString());
                System.out.println("Cantidad model:"+cantidad_model);
                int stock=c.retornar_stock_producto(descripcion_producto);
                if(cantidad_model>stock){
                    model.setValueAt(detalleProducto.devolver_tabla_venta_anterior().get(i).get(1), i, 1);
                    JOptionPane.showMessageDialog(this,"La cantidad a vender no puede ser mayor al stock","Información",JOptionPane.WARNING_MESSAGE);

                }
                if(cantidad_model<0){
                    model.setValueAt(detalleProducto.devolver_tabla_venta_anterior().get(i).get(1), i, 1);
                    JOptionPane.showMessageDialog(this,"La cantidad a vender no puede ser menor a cero","Información",JOptionPane.WARNING_MESSAGE);

                }else{
                    if(cantidad_model==0){
                        model.setValueAt(detalleProducto.devolver_tabla_venta_anterior().get(i).get(1), i, 1);
                        JOptionPane.showMessageDialog(this,"La cantidad a vender no puede ser cero","Información",JOptionPane.WARNING_MESSAGE);
                    }
                }
                }catch(Exception e){
                model.setValueAt(detalleProducto.devolver_tabla_venta_anterior().get(i).get(1), i, 1);
                invalido=true;//formato de datos erroneo
                }

                vvv=Float.parseFloat(getModel().getValueAt(i, 3).toString());

                valor_fila=cantidad_model*vvv;
                model.setValueAt(valor_fila, i, 4);
                subtotal=valor_fila+subtotal;

                }else{
                    try{
                        cantidad_model=Integer.parseInt(getModel().getValueAt(i, 1).toString());
                       
                    }catch(Exception e){
                    model.setValueAt(detalleProducto.devolver_tabla_venta_anterior().get(i).get(1), i, 1);
                    invalido=true;//formato de datos erroneo
                }

                vvv=Float.parseFloat(getModel().getValueAt(i, 3).toString());

                valor_fila=cantidad_model*vvv;
                model.setValueAt(valor_fila, i, 4);
                subtotal=valor_fila+subtotal;
                }

            }
            
            
            if(invalido){
                JOptionPane.showMessageDialog(this,"Formato de datos erróneo","Error",JOptionPane.ERROR_MESSAGE);
            }else{//si valido
            float total=0;
            if(this.cmbcomprobante.getSelectedItem().equals("Factura")){

                lblcFacturasubtotal.setText(""+redondear(subtotal,2));
                float igv=Float.parseFloat(String.valueOf(subtotal*(Float.parseFloat(this.cmbIGV.getSelectedItem().toString())/100)));
                total=igv+subtotal;
                igv=Float.parseFloat(""+redondear(igv,2));
                lblcFacturaIGV.setText(""+igv);

            }else{
                total=subtotal;
            }
            total=Float.parseFloat(""+redondear(total,2));
            lblcTotal.setText(""+total);
            }
    }
    public void registrar_comprobante_venta(String condicion_pago,int codigo, String vfecha, float igv, float total, String tipo_comprobante, String cliente, String RUC, String direccion,String orden_servicio,String orden_compra,String dni, int vIGV){

         Conexion c=new Conexion();
         c.registrar_comprobante_venta_productos(condicion_pago,codigo_usuario_auditoria,codigo, vfecha,  igv,  total,  tipo_comprobante,  cliente,  RUC,getModel(),direccion,orden_servicio,orden_compra,dni, vIGV);
         JOptionPane.showMessageDialog(this,"Se ha registrado con éxito","Información",JOptionPane.INFORMATION_MESSAGE);
                  this.setVisible(false);

         frmMantenimientoVentas.getPanelContenedorVendedor().removeAll();
         frmMantenimientoVentas.inicializar_tabla_ventas();
         frmMantenimientoVentas.getPanelContenedorVendedor().add(frmMantenimientoVentas);
         frmMantenimientoVentas.setSize(741,480);
         frmMantenimientoVentas.setVisible(false);
         frmMantenimientoVentas.setVisible(true);

     }

     public void modificar_comprobante_venta(String condicion_pago, int codigo, String vfecha, float igv, float total, String tipo_comprobante, String cliente, String RUC, String direccion, String orden_servicio, String orden_compra, String dni){

         Conexion c=new Conexion();
         DefaultTableModel modelnuevo=c.cargar_detalle_comprobante_venta(codigo);
         c.modificar_comprobante_venta_productos(condicion_pago, codigo_usuario_auditoria,codigo, vfecha, igv, total, tipo_comprobante, cliente, RUC,  direccion, orden_servicio, orden_compra, dni, model, modelnuevo);
         JOptionPane.showMessageDialog(this,"Se ha modificado con éxito","Información",JOptionPane.INFORMATION_MESSAGE);
                  this.setVisible(false);

         frmMantenimientoVentas.getPanelContenedorVendedor().removeAll();
         frmMantenimientoVentas.inicializar_tabla_ventas();
         frmMantenimientoVentas.getPanelContenedorVendedor().add(frmMantenimientoVentas);
         frmMantenimientoVentas.setSize(741,480);
         frmMantenimientoVentas.setVisible(false);
         frmMantenimientoVentas.setVisible(true);

     }

    public void cargar_datos_detalle_producto_venta(String guia, int cantidad, String descripcion, float precio, float total_parcial){
            Vector fil =new Vector();
             fil.add(guia);
             fil.add(cantidad);
             fil.add(descripcion);
             fil.add(precio);
             fil.add(total_parcial);

            getModel().addRow(fil);
            tablafaccomv.setModel(getModel());
            cambiar_color_encabezado_tabla();
            float subtotal=0;
            for(int i=0;i<getModel().getRowCount();i++){
                int cantidad_model=Integer.parseInt(getModel().getValueAt(i, 1).toString());
                String vvv=getModel().getValueAt(i, 3).toString();
                float valor_fila=cantidad_model*Float.parseFloat(vvv);
                subtotal=valor_fila+subtotal;
            }
            float total=0;
            if(this.cmbcomprobante.getSelectedItem().equals("Factura")){
                float igv=Float.parseFloat(String.valueOf(subtotal*(Float.parseFloat(this.cmbIGV.getSelectedItem().toString())/100)));
                total=igv+subtotal;
                igv=Float.parseFloat(""+redondear(igv,2));
                lblcFacturasubtotal.setText(""+redondear(subtotal,2));
                lblcFacturaIGV.setText(""+igv);

            }else{
                total=subtotal;
            }
            total=Float.parseFloat(""+redondear(total,2));
            lblcTotal.setText(""+total);

            
    }
    public void habilitarBoton(boolean habilitar){
          btnguardar.setEnabled(habilitar);
      }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnguardar;
    private javax.swing.JComboBox cmbBoletaCondicionesPago;
    private javax.swing.JComboBox cmbFacturaCondicionesPago;
    private javax.swing.JComboBox cmbIGV;
    private javax.swing.JComboBox cmbcomprobante;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JPanel jpnlBoleta;
    private javax.swing.JPanel jpnlFactura;
    private javax.swing.JPanel jpnlVentaDatosEspecificos;
    private javax.swing.JLabel lblFacturaRUC;
    private javax.swing.JLabel lblFacturaRUC1;
    private javax.swing.JLabel lblFacturaRUC10;
    private javax.swing.JLabel lblFacturaRUC11;
    private javax.swing.JLabel lblFacturaRUC12;
    private javax.swing.JLabel lblFacturaRUC13;
    private javax.swing.JLabel lblFacturaRUC3;
    private javax.swing.JLabel lblFacturaRUC4;
    private javax.swing.JLabel lblFacturaRUC5;
    private javax.swing.JLabel lblFacturaRUC6;
    private javax.swing.JLabel lblFacturaRUC7;
    private javax.swing.JLabel lblFacturaRUC8;
    private javax.swing.JLabel lblFacturaRUC9;
    private javax.swing.JLabel lblFacturasubtotal;
    private javax.swing.JLabel lblTipoComprobante;
    private javax.swing.JLabel lblTotal;
    private javax.swing.JLabel lblcFacturaIGV;
    private javax.swing.JLabel lblcFacturasubtotal;
    private javax.swing.JLabel lblcTotal;
    private javax.swing.JTextField numero;
    private javax.swing.JPanel pnlCV;
    private javax.swing.JTable tablafaccomv;
    private javax.swing.JTextField txtBoletaCliente;
    private javax.swing.JTextField txtBoletaDNI;
    private javax.swing.JTextField txtBoletaDireccion;
    private javax.swing.JTextField txtBoletaOrdenCompra;
    private javax.swing.JTextField txtBoletaOrdenServicio;
    private javax.swing.JTextField txtBoletafecha;
    private javax.swing.JTextField txtFacturaCliente;
    private javax.swing.JTextField txtFacturaDireccion;
    private javax.swing.JTextField txtFacturaOrdenCompra;
    private javax.swing.JTextField txtFacturaOrdenServicio;
    private javax.swing.JTextField txtFacturaRUC;
    private javax.swing.JTextField txtFacturafecha;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the model
     */
    public DefaultTableModel getModel() {
        return model;
    }

    /**
     * @param model the model to set
     */
    public void setModel(MiModeloVentaBoleta modelconsulta) {
        this.model = modelconsulta;
        
        tablafaccomv.setModel(this.model);
        cambiar_color_encabezado_tabla();
        detalleProducto.en_modificar_venta_cargar_data_inicial(this.model);
    }

    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;

    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
      //txtcorrelativo.setText(String.valueOf(codigo));
        numero.setText(String.valueOf(codigo));
    }

    /**
     * @return the fecha
     */
    public String getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(String fecha) {
        this.fecha = fecha;
        txtFacturafecha.setText(fecha);
        txtBoletafecha.setText(fecha);
    }

    /**
     * @return the tipo_comprobante
     */
    public String getTipo_comprobante() {
        return tipo_comprobante;
    }

    /**
     * @param tipo_comprobante the tipo_comprobante to set
     */
    public void setTipo_comprobante(String tipo_comprobante) {
        this.tipo_comprobante = tipo_comprobante;
        cmbcomprobante.setSelectedItem(tipo_comprobante);
    }

    /**
     * @return the cliente
     */
    public String getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(String cliente) {
        this.cliente = cliente;
        //if(cmbcomprobante.getSelectedItem().toString().equals("Factura")){
        txtFacturaCliente.setText(cliente);
        //}else{
            txtBoletaCliente.setText(cliente);
        //}
    }

    /**
     * @return the nRUC
     */
    public String getNRUC() {
        return nRUC;
    }

    /**
     * @param nRUC the nRUC to set
     */
    public void setNRUC(String nRUC) {
        this.nRUC = nRUC;
        txtFacturaRUC.setText(nRUC);
    }

    /**
     * @return the monto_IGV
     */
    public float getMonto_IGV() {
        return monto_IGV;
    }

    /**
     * @param monto_IGV the monto_IGV to set
     */
    public void setMonto_IGV(float monto_IGV) {
        this.monto_IGV = monto_IGV;
        this.monto_IGV=Float.parseFloat(""+redondear(this.monto_IGV,2));
        lblcFacturaIGV.setText(String.valueOf(this.monto_IGV));

    }
    public void setMonto_subtotal(float subtotal) {
        this.subtotal = subtotal;
        subtotal=Float.parseFloat(""+redondear(subtotal, 2));
        lblcFacturasubtotal.setText(String.valueOf(this.subtotal));
    }
    /**
     * @return the monto_total
     */
    public float getMonto_total() {
        return monto_total;
    }

    /**
     * @param monto_total the monto_total to set
     */
    public void setMonto_total(float monto_total) {
        this.monto_total = monto_total;
        this.monto_total=Float.parseFloat(""+redondear(this.monto_total,2));
        lblcTotal.setText(String.valueOf(this.monto_total));
    }

}
